//+------------------------------------------------------------------+
//|                                                     CheckBox.mqh |
//|                             Copyright 2000-2025, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#include "WndContainer.h"
#include "BmpButton.h"
#include "Edit.h"
//+------------------------------------------------------------------+
//| 资源声明：复选框状态位图                                          |
//+------------------------------------------------------------------+
#resource "res\\CheckBoxOn.bmp"    // 选中状态位图
#resource "res\\CheckBoxOff.bmp"   // 未选中状态位图
//+------------------------------------------------------------------+
//| CCheckBox 类                                                       |
//| 功能：实现复选框控件，包含位图按钮（状态显示）和文本标签（描述）     |
//+------------------------------------------------------------------+
class CCheckBox : public CWndContainer
  {
private:
   // 子控件：组成复选框的核心元素
   CBmpButton        m_button;      // 位图按钮（用于显示选中/未选中状态）
   CEdit             m_label;       // 文本标签（用于显示复选框描述文字）
   
   // 数据存储
   int               m_value;       // 复选框关联的数值（自定义数据）

public:
   /** 构造函数：初始化复选框状态 */
                     CCheckBox(void);
   /** 析构函数：清理资源 */
                    ~CCheckBox(void);

   //--- 创建控件
   /**
    * @brief 在图表上创建复选框控件
    * @param chart 目标图表ID
    * @param name 控件唯一名称
    * @param subwin 子窗口编号
    * @param x1 左上角X坐标
    * @param y1 左上角Y坐标
    * @param x2 右下角X坐标
    * @param y2 右下角Y坐标
    * @return 创建结果（true=成功）
    */
   virtual bool      Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2);

   //--- 图表事件处理器
   /**
    * @brief 处理图表事件
    * @param id 事件ID
    * @param lparam 长整数参数
    * @param dparam 双精度参数
    * @param sparam 字符串参数
    * @return 事件处理结果（true=已处理）
    */
   virtual bool      OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam);

   //--- 文本与颜色设置
   /** 获取标签文本内容 */
   string            Text(void)          const;
   /** 设置标签文本内容 */
   bool              Text(const string value);
   /** 获取标签文本颜色 */
   color             Color(void)         const;
   /** 设置标签文本颜色 */
   bool              Color(const color value);

   //--- 选中状态控制
   /** 获取当前是否选中 */
   bool              Checked(void)       const;
   /** 设置选中状态 */
   bool              Checked(const bool flag);

   //--- 数据值管理
   /** 获取关联的数值 */
   int               Value(void)         const;
   /** 设置关联的数值 */
   void              Value(const int value);

   //--- 文件操作（保存/加载状态）
   /** 保存状态到文件 */
   virtual bool      Save(const int file_handle);
   /** 从文件加载状态 */
   virtual bool      Load(const int file_handle);

protected:
   //--- 子控件创建
   /** 创建复选框的位图按钮 */
   virtual bool      CreateButton(void);
   /** 创建复选框的文本标签 */
   virtual bool      CreateLabel(void);

   //--- 子控件事件处理
   /** 按钮点击事件处理器 */
   virtual bool      OnClickButton(void);
   /** 标签点击事件处理器 */
   virtual bool      OnClickLabel(void);
  };
//+------------------------------------------------------------------+
//| 事件映射：关联子控件事件到处理函数                                 |
//+------------------------------------------------------------------+
EVENT_MAP_BEGIN(CCheckBox)
   ON_EVENT(ON_CLICK, m_button, OnClickButton)  // 按钮点击 → 调用OnClickButton
   ON_EVENT(ON_CLICK, m_label,  OnClickLabel)   // 标签点击 → 调用OnClickLabel
EVENT_MAP_END(CWndContainer)
//+------------------------------------------------------------------+
